package com.mm.cloud.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.mm.cloud.common.core.result.Result;
import com.mm.cloud.feign.sys.api.vo.LoginUserVO;
import com.mm.cloud.sys.dto.form.UserDTO;
import com.mm.cloud.sys.dto.form.UserToRoleDTO;
import com.mm.cloud.sys.dto.query.QueryUserDTO;
import com.mm.cloud.sys.entity.User;
import com.mm.cloud.sys.vo.UserVO;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

import java.util.List;

/**
 * <p>
 * 用户基础信息 服务类
 * </p>
 *
 * @author mr
 * @since 2020-09-15
 */
public interface IUserService extends IService<User> {

    /**
     * 分页查询
     *
     * @param dto
     * @return
     */
    Result<List<UserVO>> getUserList(QueryUserDTO dto);

    /**
     * 新增用户
     *
     * @param dto
     * @return
     */
    Result<String> saveUser(UserDTO dto);

    /**
     * 修改用户
     *
     * @param dto
     * @return
     */
    Result<String> updateUser(UserDTO dto);

    /**
     * 删除用户
     *
     * @param userId
     * @return
     */
    Result<String> deleteUser(@NotNull(message = "参数不能为空") Long userId);

    /**
     * 通过用户ID获取角色
     *
     * @param userId 用户ID
     * @return
     */
    Result<List<Long>> getRoleByUserId(@NotNull(message = "参数不能为空") Long userId);

    /**
     * 用户角色设置
     *
     * @param dto
     * @return
     */
    Result<String> setUserToRole(UserToRoleDTO dto);

    /**
     * 登录-通过用户名获取用户信息
     *
     * @param username
     * @return
     */
    Result<LoginUserVO> getUserByUsername(@NotBlank(message = "用户名不能为空") String username);

    /**
     * 登录-通过手机号码获取用户信息
     *
     * @param phone
     * @return
     */
    Result<LoginUserVO> getUserByPhone(@NotBlank(message = "手机号不能为空") String phone);
}
